#ifndef __TASK_HPP__
#define __TASK_HPP__
#include<unordered_map>
#include<functional>
#include<iostream>

using func_t = std::function<void()>;

void DownLoad()
{
    std::cout<<"我是一个下载任务"<<std::endl;
}

void NetCal()
{
    std::cout<<"我是一个计算机任务"<<std::endl;
}

void MySQL()
{
    std::cout<<"我是一个数据库任务"<<std::endl;
}

class TaskManger
{
    public:
    TaskManger()
    {
        WorkQueue[0] = DownLoad;
        WorkQueue[1] = NetCal;
        WorkQueue[2] = MySQL;
    }

    int SelectWork()
    {
        srand(time(nullptr));

        int num = rand()%WorkQueue.size();
        return num;
    }
    void Excute(int cmd)
    {
        WorkQueue[cmd]();
    }

    ~TaskManger()
    {

    }

    private:
    std::unordered_map<int,func_t> WorkQueue;

};
TaskManger tm;

//子进程工作模块
void Worker()
{
    //读出一个整数，代表要执行的任务,将管道读端重定向到0
    while(true)
    {
        int cnd = 0;
        size_t n = ::read(0,&cnd,sizeof(cnd));
        if(n==sizeof(cnd))
        {
            tm.Excute(cnd);
        }
        if(n==0)
        {
            break;
        }

    }

}

#endif